#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define        MAX        101

char **    create1( int n ) ;
char *    create2( int n ) ;
void    sort( char** strArray , int size ) ; 

int main()
{
    char**    strArray ;
    int        n , i ;

    scanf("%d",&n) ;
    strArray = create1( n ) ; 
    if ( strArray != NULL ) 
    {
        for ( i = 0 ; i < n ; i++ ) 
        {
            strArray[i] = create2( MAX ) ;
            if ( strArray[i] == NULL ) return -1 ;
        }            
    }
    else return -1 ;//这里两个 return -1 都是无法获得内存时直接结束程序 

    getchar();//吃掉前边输入的回车符 

    for( i = 0 ; i < n ; i++ ) 
        gets(strArray[i]); //读入字符串 

    sort( strArray , n ) ; //排序 

    for( i = 0 ; i < n ; i++ ) 
        printf("%s\n",strArray[i]); //输出

    for ( i = 0 ; i < n ; i++ )  
        free(strArray[i]) ;
    free(strArray) ;

    return 0;
}

char **    create1( int n )//申请一维字符型指针数组空间
{
    char**p=(char**)malloc(sizeof(char*)*n);
    return p;
}

char *    create2( int n ) //申请一维字符型变量空间
{
    char*p=(char*)malloc(MAX*sizeof(char));
    return p;
}


void    sort( char** strArray , int size )//选择排序，用到临时指针p以及strcmp函数；
{
    int sign;
    char*p;
    for(int i=0;i<size;i++)
    {
        for(int j=i;j<size;j++)
        {
            sign=strcmp(strArray[i],strArray[j]);
            if(sign>0)
            {
              p=strArray[i];
              strArray[i]=strArray[j];
              strArray[j]=p;
            }
        }
    }
}